import hljs from 'highlight.js';
import { marked } from 'marked';

// 自定义 marked 渲染器
const renderer = new marked.Renderer();
renderer.code = ({ text, lang }: { text?: string; lang?: string }): string => {
  const validLang = lang && hljs.getLanguage(lang) ? lang : 'plaintext';
  const highlighted = hljs.highlight(text as string, {
    language: validLang,
    ignoreIllegals: true,
  }).value;
  return `<pre><code class="hljs ${validLang}">${highlighted}</code></pre>`;
};

// 初始化 marked
marked.setOptions({
  renderer, // 使用自定义渲染器
  breaks: true, // 支持换行符
  gfm: true, // 启用 GitHub Flavored Markdown
});

/**
 * 初始化代码高亮配置
 * 该函数配置了 hljs（Highlight.js）的高亮特性，使其在处理特定编程语言时表现最佳
 * 它限制了高亮处理的语言范围，并设置了处理 HTML 内容时的特殊行为
 */
export const initHighlight = () => {
  hljs.configure({
    languages: ['javascript', 'typescript', 'html', 'css', 'python', 'bash'], // 指定支持的语言
    ignoreUnescapedHTML: true, // 忽略未转义的 HTML
  });
};
